<html>
<head>
  <title>Evernote Export</title>
  <basefont face="微软雅黑" size="2" />
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <meta name="exporter-version" content="YXBJ Windows/603604 (zh-CN, DDL); Windows/10.0.0 (Win64); EDAMVersion=V2;"/>
  <style>
    body, td {
      font-family: 微软雅黑;
      font-size: 10pt;
    }
  </style>
</head>
<body>
<a name="1495"/>

<div>
<span><div><font style="font-size: 18pt;"><span style="font-weight: bold;">MyBatis-Plus 常见api</span></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><span style="font-weight: bold;">官方文档：</span><a href="https://mp.baomidou.com/guide/quick-start.html#%E5%88%9D%E5%A7%8B%E5%8C%96%E5%B7%A5%E7%A8%8B" style="color: rgb(255, 0, 0); font-weight: bold;">https://mp.baomidou.com/guide/quick-start.html#%E5%88%9D%E5%A7%8B%E5%8C%96%E5%B7%A5%E7%A8%8B</a></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">依赖：</font></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">&lt;!--mybatis -plus--&gt;</font></div><div><font style="font-size: 16pt;">&lt;dependency&gt;</font></div><div><font style="font-size: 16pt;">    &lt;groupId&gt;com.baomidou&lt;/groupId&gt;</font></div><div><font style="font-size: 16pt;">    &lt;artifactId&gt;mybatis-plus-boot-starter&lt;/artifactId&gt;</font></div><div><font style="font-size: 16pt;">    &lt;version&gt;3.4.2&lt;/version&gt;</font></div><div><font style="font-size: 16pt;">&lt;/dependency&gt;</font></div><div><font style="font-size: 16pt;">&lt;dependency&gt;</font></div><div><font style="font-size: 16pt;">    &lt;groupId&gt;com.baomidou&lt;/groupId&gt;</font></div><div><font style="font-size: 16pt;">    &lt;artifactId&gt;mybatis-plus-generator&lt;/artifactId&gt;</font></div><div><font style="font-size: 16pt;">    &lt;version&gt;3.4.1&lt;/version&gt;</font></div><div><font style="font-size: 16pt;">&lt;/dependency&gt;</font></div><div><font style="font-size: 16pt;">&lt;!--添加 模板引擎 依赖，MyBatis-Plus 支持 Velocity（默认）、Freemarker、Beetl，用户可以选择自己熟悉的模板引擎，如果都不满足您的要求，可以采用自定义模板引擎。--&gt;</font></div><div><font style="font-size: 16pt;">&lt;dependency&gt;</font></div><div><font style="font-size: 16pt;">    &lt;groupId&gt;org.apache.velocity&lt;/groupId&gt;</font></div><div><font style="font-size: 16pt;">    &lt;artifactId&gt;velocity-engine-core&lt;/artifactId&gt;</font></div><div><font style="font-size: 16pt;">    &lt;version&gt;2.2&lt;/version&gt;</font></div><div><font style="font-size: 16pt;">&lt;/dependency&gt;</font></div><div><font style="font-size: 16pt;">&lt;dependency&gt;</font></div><div><font style="font-size: 16pt;">    &lt;groupId&gt;org.freemarker&lt;/groupId&gt;</font></div><div><font style="font-size: 16pt;">    &lt;artifactId&gt;freemarker&lt;/artifactId&gt;</font></div><div><font style="font-size: 16pt;">    &lt;version&gt;2.3.31&lt;/version&gt;</font></div><div><font style="font-size: 16pt;">&lt;/dependency&gt;</font></div></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">常见配置：API的常见配置</font></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">server:</font></div><div><font style="font-size: 16pt;">  port: 8080</font></div><div><font style="font-size: 16pt;">  servlet:</font></div><div><font style="font-size: 16pt;">    context-path: /</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">spring:</font></div><div><font style="font-size: 16pt;">  datasource:</font></div><div><font style="font-size: 16pt;">    username: root</font></div><div><font style="font-size: 16pt;">    password: 123456</font></div><div><font style="font-size: 16pt;">    url: jdbc:mysql://localhost:3306/db01?characterEncoding=utf8&amp;useSSL=false</font></div><div><font style="font-size: 16pt;">    driver‐class‐name: com.mysql.jdbc.Driver</font></div><div><font style="font-size: 16pt;">    type: com.alibaba.druid.pool.DruidDataSource</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    # 数据源其他配置</font></div><div><font style="font-size: 16pt;">    #druid 数据源专有配置</font></div><div><font style="font-size: 16pt;">    #Spring Boot 默认是不注入这些属性值的，需要自己绑定</font></div><div><font style="font-size: 16pt;">    initialSize: 5</font></div><div><font style="font-size: 16pt;">    minIdle: 5</font></div><div><font style="font-size: 16pt;">    maxActive: 20</font></div><div><font style="font-size: 16pt;">    maxWait: 60000</font></div><div><font style="font-size: 16pt;">    timeBetweenEvictionRunsMillis: 60000</font></div><div><font style="font-size: 16pt;">    minEvictableIdleTimeMillis: 300000</font></div><div><font style="font-size: 16pt;">    validationQuery: SELECT 1 FROM DUAL</font></div><div><font style="font-size: 16pt;">    testWhileIdle: true</font></div><div><font style="font-size: 16pt;">    testOnBorrow: false</font></div><div><font style="font-size: 16pt;">    testOnReturn: false</font></div><div><font style="font-size: 16pt;">    poolPreparedStatements: true</font></div><div><font style="font-size: 16pt;">    # 配置监控统计拦截的filters，去掉后监控界面sql无法统计，'wall'用于防火墙</font></div><div><font style="font-size: 16pt;">    #配置监控统计拦截的filters，stat:监控统计、log4j：日志记录、wall：防御sql注入</font></div><div><font style="font-size: 16pt;">    #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority</font></div><div><font style="font-size: 16pt;">    #则导入 log4j 依赖即可，Maven 地址：https://mvnrepository.com/artifact/log4j/log4j</font></div><div><font style="font-size: 16pt;">    #filters: stat,wall,log4j</font></div><div><font style="font-size: 16pt;">    filters: stat,wall</font></div><div><font style="font-size: 16pt;">    maxPoolPreparedStatementPerConnectionSize: 20</font></div><div><font style="font-size: 16pt;">    useGlobalDataSourceStat: true</font></div><div><font style="font-size: 16pt;">    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500</font></div><div><font style="font-size: 16pt;">    #初始化数据库脚本</font></div><div><font style="font-size: 16pt;">    #schema: classpath:sql/schema.sql</font></div><div><font style="font-size: 16pt;">    #initialization-mode: always #首次启动需要</font></div><div><font style="font-size: 16pt;">    druid:</font></div><div><font style="font-size: 16pt;">      stat-view-servlet:</font></div><div><font style="font-size: 16pt;">        enabled: true</font></div><div><font style="font-size: 16pt;">        allow: #不填写则允许所有</font></div><div><font style="font-size: 16pt;">        url-pattern: /druid/*</font></div><div><font style="font-size: 16pt;">        login-username: admin</font></div><div><font style="font-size: 16pt;">        login-password: 123456</font></div><div><font style="font-size: 16pt;">      web-stat-filter:</font></div><div><font style="font-size: 16pt;">        enabled: true</font></div><div><font style="font-size: 16pt;"># 在使用某一个组件的时候。如果比较常用，通常是先寻找有没有对应的场景启动器，如果有，可以直接使用，减少很多代码量</font></div><div><font style="font-size: 16pt;"># 要使用对应组件需要知道自动配置类的原理，这样才能更好的去优化和使用，不要傻瓜式的使用</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">#mybatis plus</font></div><div><font style="font-size: 16pt;">mybatis-plus:</font></div><div><font style="font-size: 16pt;">  configuration:</font></div><div><font style="font-size: 16pt;">    map-underscore-to-camel-case: true</font></div><div><font style="font-size: 16pt;">    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #org.apache.ibatis.logging.log4j.Log4jImpl</font></div><div><font style="font-size: 16pt;">  type-aliases-package: cn.edu.zzu.entity #别名， 等同在全局配置文件中配置typeAlias</font></div><div><font style="font-size: 16pt;">  mapper-locations: classpath:mapper/*Mapper.xml</font></div><div><font style="font-size: 16pt;">  #config-location:  classpath:SqlMapConfig.xml  #不能和configuration同时存在，若使用配置文件，需要将configuration配置到xml中去</font></div><div><font style="font-size: 16pt;">  global-config:</font></div><div><font style="font-size: 16pt;">    db-config:</font></div><div><font style="font-size: 16pt;">      logic-delete-field: deleted  # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)</font></div><div><font style="font-size: 16pt;">      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)</font></div><div><font style="font-size: 16pt;">      logic-delete-value: 1 # 逻辑已删除值(默认为 1)</font></div></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">SqlMapConfig,若在yml中配置了Configuration，则该配置文件不能进行声明，二者择其一：都是进行配置用的</font></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</font></div><div><font style="font-size: 16pt;">&lt;!DOCTYPE configuration</font></div><div><font style="font-size: 16pt;">        PUBLIC &quot;-//mybatis.org//DTD Config 3.0//EN&quot;</font></div><div><font style="font-size: 16pt;">        &quot;http://mybatis.org/dtd/mybatis-3-config.dtd&quot;&gt;</font></div><div><font style="font-size: 16pt;">&lt;configuration&gt;</font></div><div><font style="font-size: 16pt;">    &lt;settings&gt;</font></div><div><font style="font-size: 16pt;">        &lt;!--mybatis日志--&gt;</font></div><div><font style="font-size: 16pt;">        &lt;setting name=&quot;logImpl&quot; value=&quot;STDOUT_LOGGING&quot;/&gt;</font></div><div><font style="font-size: 16pt;">        &lt;!--驼峰命名--&gt;</font></div><div><font style="font-size: 16pt;">        &lt;setting name=&quot;mapUnderscoreToCamelCase&quot; value=&quot;true&quot;/&gt;</font></div><div><font style="font-size: 16pt;">    &lt;/settings&gt;</font></div><div><font style="font-size: 16pt;">&lt;/configuration&gt;</font></div></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">自动填充策略处理器：</font></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">package cn.edu.zzu.handler;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;</font></div><div><font style="font-size: 16pt;">import lombok.extern.slf4j.Slf4j;</font></div><div><font style="font-size: 16pt;">import org.apache.ibatis.reflection.MetaObject;</font></div><div><font style="font-size: 16pt;">import org.springframework.stereotype.Component;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import java.util.Date;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">@Slf4j</font></div><div><font style="font-size: 16pt;">@Component</font></div><div><font style="font-size: 16pt;">public class MyMetaObjectHandler implements MetaObjectHandler {</font></div><div><font style="font-size: 16pt;">    // 插入时的填充策略</font></div><div><font style="font-size: 16pt;">    @Override</font></div><div><font style="font-size: 16pt;">    public void insertFill(MetaObject metaObject) {</font></div><div><font style="font-size: 16pt;">        log.info(&quot;start insert fill.....&quot;);</font></div><div><font style="font-size: 16pt;">        // setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject</font></div><div><font style="font-size: 16pt;">        this.setFieldValByName(&quot;gmtCreated&quot;,new Date(),metaObject);</font></div><div><font style="font-size: 16pt;">        this.setFieldValByName(&quot;gmtModified&quot;,new Date(),metaObject);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    // 更新时的填充策略</font></div><div><font style="font-size: 16pt;">    @Override</font></div><div><font style="font-size: 16pt;">    public void updateFill(MetaObject metaObject) {</font></div><div><font style="font-size: 16pt;">        log.info(&quot;start update fill.....&quot;);</font></div><div><font style="font-size: 16pt;">        this.setFieldValByName(&quot;gmtModified&quot;,new Date(),metaObject);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;">}</font></div></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">MyBatisConfig：插件配置：</font></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">package cn.edu.zzu.config;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.annotation.DbType;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;</font></div><div><font style="font-size: 16pt;">import org.mybatis.spring.annotation.MapperScan;</font></div><div><font style="font-size: 16pt;">import org.springframework.context.annotation.Bean;</font></div><div><font style="font-size: 16pt;">import org.springframework.context.annotation.Configuration;</font></div><div><font style="font-size: 16pt;">import org.springframework.transaction.annotation.EnableTransactionManagement;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">@Configuration</font></div><div><font style="font-size: 16pt;">@EnableTransactionManagement//启动事务支持</font></div><div><font style="font-size: 16pt;">@MapperScan(&quot;cn.edu.zzu.mapper&quot;)</font></div><div><font style="font-size: 16pt;">public class MybatisConfig {</font></div><div><font style="font-size: 16pt;">    </font></div><div><font style="font-size: 16pt;">    @Bean</font></div><div><font style="font-size: 16pt;">    public MybatisPlusInterceptor mybatisPlusInterceptor() {</font></div><div><font style="font-size: 16pt;">        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();</font></div><div><font style="font-size: 16pt;">        /**</font></div><div><font style="font-size: 16pt;">         *乐观锁插件</font></div><div><font style="font-size: 16pt;">         */</font></div><div><font style="font-size: 16pt;">        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());</font></div><div><font style="font-size: 16pt;">        /**</font></div><div><font style="font-size: 16pt;">         * 分页插件</font></div><div><font style="font-size: 16pt;">         */</font></div><div><font style="font-size: 16pt;">        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));</font></div><div><font style="font-size: 16pt;">        return interceptor;</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;">}</font></div></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">实体类：常用注解 TableXXX</font></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">package cn.edu.zzu.entity;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.annotation.*;</font></div><div><font style="font-size: 16pt;">import lombok.AllArgsConstructor;</font></div><div><font style="font-size: 16pt;">import lombok.Data;</font></div><div><font style="font-size: 16pt;">import lombok.NoArgsConstructor;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import java.util.Date;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">@Data</font></div><div><font style="font-size: 16pt;">@AllArgsConstructor</font></div><div><font style="font-size: 16pt;">@NoArgsConstructor</font></div><div><font style="font-size: 16pt;">public class User {</font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * public enum IdType {</font></div><div><font style="font-size: 16pt;">     * AUTO(0), // 数据库id自增</font></div><div><font style="font-size: 16pt;">     * NONE(1), // 未设置主键</font></div><div><font style="font-size: 16pt;">     * INPUT(2), // 手动输入</font></div><div><font style="font-size: 16pt;">     * ID_WORKER(3), // 默认的全局唯一id</font></div><div><font style="font-size: 16pt;">     * UUID(4), // 全局唯一id uuid</font></div><div><font style="font-size: 16pt;">     * ID_WORKER_STR(5); //ID_WORKER 字符串表示法</font></div><div><font style="font-size: 16pt;">     * }</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @TableId(type = IdType.ID_WORKER)</font></div><div><font style="font-size: 16pt;">    private Long id;</font></div><div><font style="font-size: 16pt;">    private String name;</font></div><div><font style="font-size: 16pt;">    private Integer age;</font></div><div><font style="font-size: 16pt;">    private String email;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 乐观锁</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Version</font></div><div><font style="font-size: 16pt;">    private Integer version;</font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 逻辑删除</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    // @TableLogic</font></div><div><font style="font-size: 16pt;">    private Integer deleted ;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 插入时填充</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @TableField(fill = FieldFill.INSERT)</font></div><div><font style="font-size: 16pt;">    private Date gmtCreated;</font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 插入更新时填充</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @TableField(fill = FieldFill.INSERT_UPDATE)</font></div><div><font style="font-size: 16pt;">    private Date gmtModified;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * @param id</font></div><div><font style="font-size: 16pt;">     * @param name</font></div><div><font style="font-size: 16pt;">     * @param age</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    public User(Long id, String name, Integer age) {</font></div><div><font style="font-size: 16pt;">        this.id = id;</font></div><div><font style="font-size: 16pt;">        this.name = name;</font></div><div><font style="font-size: 16pt;">        this.age = age;</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    public User(String name, Integer age, String email) {</font></div><div><font style="font-size: 16pt;">        this.name = name;</font></div><div><font style="font-size: 16pt;">        this.age = age;</font></div><div><font style="font-size: 16pt;">        this.email = email;</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    public User(Long id, String name, Integer age, String email) {</font></div><div><font style="font-size: 16pt;">        this.id = id;</font></div><div><font style="font-size: 16pt;">        this.name = name;</font></div><div><font style="font-size: 16pt;">        this.age = age;</font></div><div><font style="font-size: 16pt;">        this.email = email;</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;">}</font></div></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">Mapper继承BaseMapper&lt;&gt;:</font></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">package cn.edu.zzu.test.mapper;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import cn.edu.zzu.test.entity.Dept;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.core.mapper.BaseMapper;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">/**</font></div><div><font style="font-size: 16pt;">* &lt;p&gt;</font></div><div><font style="font-size: 16pt;">*  Mapper 接口</font></div><div><font style="font-size: 16pt;">* &lt;/p&gt;</font></div><div><font style="font-size: 16pt;">*</font></div><div><font style="font-size: 16pt;">* @author zzu</font></div><div><font style="font-size: 16pt;">* @since 2021-08-19</font></div><div><font style="font-size: 16pt;">*/</font></div><div><font style="font-size: 16pt;">public interface DeptMapper extends BaseMapper&lt;Dept&gt; {</font></div><div><font style="font-size: 16pt;">}</font></div></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">Service继承IService：</font></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">package cn.edu.zzu.test.service;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import cn.edu.zzu.test.entity.Dept;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.extension.service.IService;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">/**</font></div><div><font style="font-size: 16pt;">* &lt;p&gt;</font></div><div><font style="font-size: 16pt;">*  服务类</font></div><div><font style="font-size: 16pt;">* &lt;/p&gt;</font></div><div><font style="font-size: 16pt;">*</font></div><div><font style="font-size: 16pt;">* @author zzu</font></div><div><font style="font-size: 16pt;">* @since 2021-08-19</font></div><div><font style="font-size: 16pt;">*/</font></div><div><font style="font-size: 16pt;">public interface DeptService extends IService&lt;Dept&gt; {</font></div><div><font style="font-size: 16pt;">}</font></div></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">Impl继承serviceImpl并实现Service：</font></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">package cn.edu.zzu.test.service.impl;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import cn.edu.zzu.test.entity.Dept;</font></div><div><font style="font-size: 16pt;">import cn.edu.zzu.test.mapper.DeptMapper;</font></div><div><font style="font-size: 16pt;">import cn.edu.zzu.test.service.DeptService;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;</font></div><div><font style="font-size: 16pt;">import org.springframework.stereotype.Service;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">/**</font></div><div><font style="font-size: 16pt;">* &lt;p&gt;</font></div><div><font style="font-size: 16pt;">*  服务实现类</font></div><div><font style="font-size: 16pt;">* &lt;/p&gt;</font></div><div><font style="font-size: 16pt;">*</font></div><div><font style="font-size: 16pt;">* @author zzu</font></div><div><font style="font-size: 16pt;">* @since 2021-08-19</font></div><div><font style="font-size: 16pt;">*/</font></div><div><font style="font-size: 16pt;">@Service</font></div><div><font style="font-size: 16pt;">public class DeptServiceImpl extends ServiceImpl&lt;DeptMapper, Dept&gt; implements DeptService {</font></div><div><font style="font-size: 16pt;">}</font></div></div><div><font style="font-size: 16pt;"><br/></font></div><div><span style="font-weight: bold;"><font style="color: rgb(255, 0, 0); font-size: 18pt;">常见API：简单CURD</font></span></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">package cn.edu.zzu;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import cn.edu.zzu.entity.Dept;</font></div><div><font style="font-size: 16pt;">import cn.edu.zzu.entity.User;</font></div><div><font style="font-size: 16pt;">import cn.edu.zzu.mapper.IDeptMapper;</font></div><div><font style="font-size: 16pt;">import cn.edu.zzu.mapper.IUserMapper;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.extension.plugins.pagination.Page;</font></div><div><font style="font-size: 16pt;">import org.junit.jupiter.api.Test;</font></div><div><font style="font-size: 16pt;">import org.springframework.beans.factory.annotation.Autowired;</font></div><div><font style="font-size: 16pt;">import org.springframework.boot.test.context.SpringBootTest;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import java.util.Arrays;</font></div><div><font style="font-size: 16pt;">import java.util.HashMap;</font></div><div><font style="font-size: 16pt;">import java.util.List;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">@SpringBootTest</font></div><div><font style="font-size: 16pt;">class TestmybatisplusApplicationTests {</font></div><div><font style="font-size: 16pt;">    @Autowired</font></div><div><font style="font-size: 16pt;">    IDeptMapper iDeptMapper;</font></div><div><font style="font-size: 16pt;">    @Autowired</font></div><div><font style="font-size: 16pt;">    IUserMapper iUserMapper;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void contextLoads() {</font></div><div><font style="font-size: 16pt;">        iDeptMapper.selectList(null).forEach(System.out::println);</font></div><div><font style="font-size: 16pt;">        iUserMapper.selectList(null).forEach(System.out::println);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;">    /*========================简单CURD操作====================*/</font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 插入测试</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    public  void  insert()</font></div><div><font style="font-size: 16pt;">    {</font></div><div><font style="font-size: 16pt;">        User user = new User(&quot;张三&quot;, 18, &quot;87089043@qq.com&quot;);</font></div><div><font style="font-size: 16pt;">        int insert = iUserMapper.insert(user);</font></div><div><font style="font-size: 16pt;">        System.out.println(insert);</font></div><div><font style="font-size: 16pt;">        System.out.println(user);//自动返回插入的对象的主键</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 更新测试</font></div><div><font style="font-size: 16pt;">     *</font></div><div><font style="font-size: 16pt;">     * 动态sql</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void update(){</font></div><div><font style="font-size: 16pt;">        User user = new User(1427966662786727937L,&quot;李四&quot;, 18, &quot;87089043@qq.com&quot;);</font></div><div><font style="font-size: 16pt;">        User user1 = new User(1427966662786727937L,&quot;李四&quot;, 19);</font></div><div><font style="font-size: 16pt;">        int update = iUserMapper.updateById(user);</font></div><div><font style="font-size: 16pt;">        int i = iUserMapper.updateById(user1);</font></div><div><font style="font-size: 16pt;">        System.out.println(update);</font></div><div><font style="font-size: 16pt;">        System.out.println(i);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 测试乐观锁</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void testOptimistic(){</font></div><div><font style="font-size: 16pt;">        User user = iUserMapper.selectById(1L);</font></div><div><font style="font-size: 16pt;">        user.setAge(29);</font></div><div><font style="font-size: 16pt;">        user.setName(&quot;小三&quot;);</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        iUserMapper.updateById(user);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 测试乐观锁多线程模拟</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void testOptimisticLocker(){</font></div><div><font style="font-size: 16pt;">        // 线程 1</font></div><div><font style="font-size: 16pt;">        User user = iUserMapper.selectById(1L);</font></div><div><font style="font-size: 16pt;">        User user1 = iUserMapper.selectById(1L);</font></div><div><font style="font-size: 16pt;">        user.setName(&quot;小四&quot;);</font></div><div><font style="font-size: 16pt;">        user1.setName(&quot;小五&quot;);</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        int result2 = iUserMapper.updateById(user1);</font></div><div><font style="font-size: 16pt;">        System.out.println(result2);</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        // 自旋锁来多次尝试提交！</font></div><div><font style="font-size: 16pt;">        int result1 = iUserMapper.updateById(user);// 如果没有乐观锁就会覆盖插队线程的值！</font></div><div><font style="font-size: 16pt;">        System.out.println(result1);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 批量查询操作</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void  BatchIds(){</font></div><div><font style="font-size: 16pt;">        iUserMapper.selectBatchIds(Arrays.asList(1L , 2L ,3L)).forEach(System.out::println);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 条件查询</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void MapQuery(){</font></div><div><font style="font-size: 16pt;">        HashMap&lt;String, Object&gt; map = new HashMap&lt;&gt;();</font></div><div><font style="font-size: 16pt;">        map.put(&quot;name&quot; , &quot;小五&quot;);</font></div><div><font style="font-size: 16pt;">        map.put(&quot;age&quot; , 29);</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        for (User user : iUserMapper.selectByMap(map)) {</font></div><div><font style="font-size: 16pt;">            System.out.println(user);</font></div><div><font style="font-size: 16pt;">        }</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 分页插件查询</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void  pageQuery(){</font></div><div><font style="font-size: 16pt;">        Page&lt;User&gt; userPage = new Page&lt;&gt;(3 , 3);</font></div><div><font style="font-size: 16pt;">        Page&lt;User&gt; users = iUserMapper.selectPage(userPage, null);</font></div><div><font style="font-size: 16pt;">        users.getRecords().forEach(System.out::println);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 逻辑删除 ， 增加字段  -  增加配置</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 测试删除</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void delete(){</font></div><div><font style="font-size: 16pt;">        iUserMapper.deleteById(2L);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 批量删除</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void  testBatchDelete(){</font></div><div><font style="font-size: 16pt;">        int i = iUserMapper.deleteBatchIds(Arrays.asList(1427965129214922753L,1427966662786727937L));</font></div><div><font style="font-size: 16pt;">        System.out.println(i);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 条件删除</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void deleteByMap(){</font></div><div><font style="font-size: 16pt;">        HashMap&lt;String , Object&gt; userHashMap = new HashMap&lt;String , Object&gt;();</font></div><div><font style="font-size: 16pt;">        userHashMap.put(&quot;name&quot;,&quot;Sandy&quot;);</font></div><div><font style="font-size: 16pt;">        int i = iUserMapper.deleteByMap(userHashMap);</font></div><div><font style="font-size: 16pt;">        System.out.println(i);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;">}</font></div></div><div style="text-align: center;"><font style="font-size: 16pt;"><img src="./MyBatis-Plus/Image.png" type="image/png" data-filename="Image.png" width="1072"/></font></div><div style="text-align: center;"><font style="font-size: 16pt;">图 查询所有</font></div><div style="text-align: center;"><font style="font-size: 16pt;"><img src="./MyBatis-Plus/Image [1].png" type="image/png" data-filename="Image.png" width="1082"/></font></div><div style="text-align: center;"><font style="font-size: 16pt;">图 更新动态sql拼接</font></div><div style="text-align: center;"><font style="font-size: 16pt;"><img src="./MyBatis-Plus/Image [2].png" type="image/png" data-filename="Image.png" width="1024"/></font></div><div style="text-align: center;"><font style="font-size: 16pt;">图 分页插件</font></div><div style="text-align: center;"><span style="color: rgb(227, 0, 0); font-weight: bold;"><font style="font-size: 16pt;"><img src="./MyBatis-Plus/Image [3].png" type="image/png" data-filename="Image.png" width="1077"/></font></span></div><div style="text-align: center;"><font style="font-size: 16pt;">图 乐观锁</font></div><div><font color="#E30000" style="font-size: 16pt;"><br/></font></div><div><font color="#FF0000" style="font-size: 18pt;"><br/></font></div><div><span style="font-weight: bold;"><font color="#FF0000" style="font-size: 18pt;">常见API：QueryWrapper查询</font></span></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">package cn.edu.zzu;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import cn.edu.zzu.entity.User;</font></div><div><font style="font-size: 16pt;">import cn.edu.zzu.mapper.IUserMapper;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;</font></div><div><font style="font-size: 16pt;">import org.junit.jupiter.api.Test;</font></div><div><font style="font-size: 16pt;">import org.springframework.beans.factory.annotation.Autowired;</font></div><div><font style="font-size: 16pt;">import org.springframework.boot.test.context.SpringBootTest;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import java.util.List;</font></div><div><font style="font-size: 16pt;">import java.util.Map;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">@SpringBootTest</font></div><div><font style="font-size: 16pt;">public class TestQueryWrapper {</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    @Autowired</font></div><div><font style="font-size: 16pt;">    IUserMapper iUserMapper;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 条件构造器</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void testQueryWrapper() {</font></div><div><font style="font-size: 16pt;">        QueryWrapper&lt;User&gt; userQueryWrapper = new QueryWrapper&lt;&gt;();</font></div><div><font style="font-size: 16pt;">        userQueryWrapper.ge(&quot;age&quot;, 20).isNotNull(&quot;email&quot;);</font></div><div><font style="font-size: 16pt;">        List&lt;User&gt; users = iUserMapper.selectList(userQueryWrapper);</font></div><div><font style="font-size: 16pt;">        for (User user : users) {</font></div><div><font style="font-size: 16pt;">            System.out.println(user);</font></div><div><font style="font-size: 16pt;">        }</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * eq</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void testEq() {</font></div><div><font style="font-size: 16pt;">        QueryWrapper&lt;User&gt; eq = new QueryWrapper&lt;User&gt;().eq(&quot;name&quot;, &quot;李四&quot;);</font></div><div><font style="font-size: 16pt;">        User user = iUserMapper.selectOne(eq);</font></div><div><font style="font-size: 16pt;">        System.out.println(user);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * between</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void testBetween() {</font></div><div><font style="font-size: 16pt;">        QueryWrapper&lt;User&gt; age = new QueryWrapper&lt;User&gt;().between(&quot;age&quot;, 10, 20);</font></div><div><font style="font-size: 16pt;">        Integer integer = iUserMapper.selectCount(age);</font></div><div><font style="font-size: 16pt;">        System.out.println(integer);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * like</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void testLike() {</font></div><div><font style="font-size: 16pt;">        //like  %%</font></div><div><font style="font-size: 16pt;">        //likeRight  S% 以S开头</font></div><div><font style="font-size: 16pt;">        //likeLeft   %S 以S结尾</font></div><div><font style="font-size: 16pt;">        QueryWrapper&lt;User&gt; userQueryWrapper = new QueryWrapper&lt;User&gt;().notLike(&quot;name&quot;, &quot;三&quot;).likeRight(&quot;name&quot;, &quot;S&quot;).likeLeft(&quot;name&quot;, &quot;y&quot;);</font></div><div><font style="font-size: 16pt;">        List&lt;Map&lt;String, Object&gt;&gt; list = iUserMapper.selectMaps(userQueryWrapper);</font></div><div><font style="font-size: 16pt;">        list.forEach(System.out::println);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    /**</font></div><div><font style="font-size: 16pt;">     * 子查询</font></div><div><font style="font-size: 16pt;">     */</font></div><div><font style="font-size: 16pt;">    @Test</font></div><div><font style="font-size: 16pt;">    void testInSql(){</font></div><div><font style="font-size: 16pt;">        String sql = &quot;select age from user where id in (2,3,4)&quot;;</font></div><div><font style="font-size: 16pt;">        QueryWrapper&lt;User&gt; age = new QueryWrapper&lt;User&gt;().inSql(&quot;age&quot;, sql).orderByDesc(&quot;id&quot;);</font></div><div><font style="font-size: 16pt;">        iUserMapper.selectList(age).forEach(System.out::println);</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;">}</font></div></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="color: rgb(255, 0, 0); font-size: 18pt;"><span style="font-weight: bold;">自动构建代码：</span></font></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.15);-en-codeblock:true;"><div><font style="font-size: 16pt;">package cn.edu.zzu;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.annotation.DbType;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.annotation.FieldFill;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.annotation.IdType;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.core.toolkit.StringPool;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.generator.AutoGenerator;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.generator.InjectionConfig;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.generator.config.*;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.generator.config.po.TableFill;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.generator.config.po.TableInfo;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.generator.config.rules.DateType;</font></div><div><font style="font-size: 16pt;">import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">import java.util.ArrayList;</font></div><div><font style="font-size: 16pt;">import java.util.List;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">public class GeneratorCode {</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">    public static void main(String[] args) {</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        //代码自动成器</font></div><div><font style="font-size: 16pt;">        AutoGenerator autoGenerator = new AutoGenerator();</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        //1.全局配置</font></div><div><font style="font-size: 16pt;">        GlobalConfig gc = new GlobalConfig();</font></div><div><font style="font-size: 16pt;">        String path = System.getProperty(&quot;user.dir&quot;);</font></div><div><font style="font-size: 16pt;">        gc.setOutputDir(path+&quot;/src/main/java&quot;);//输出文件目录</font></div><div><font style="font-size: 16pt;">        gc.setAuthor(&quot;zzu&quot;);//作者</font></div><div><font style="font-size: 16pt;">        gc.setOpen(false);//是否打开文件目录</font></div><div><font style="font-size: 16pt;">        gc.setFileOverride(false); //是否覆盖</font></div><div><font style="font-size: 16pt;">        gc.setIdType(IdType.ID_WORKER);//主键生成策略 雪花算法</font></div><div><font style="font-size: 16pt;">        gc.setDateType(DateType.ONLY_DATE);//日期字段</font></div><div><font style="font-size: 16pt;">        gc.setServiceName(&quot;%sService&quot;);//去除Service的I前缀</font></div><div><font style="font-size: 16pt;">        gc.setSwagger2(true);//是否开启api文档注释</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        autoGenerator.setGlobalConfig(gc);</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        //2.数据源</font></div><div><font style="font-size: 16pt;">        DataSourceConfig dataSourceConfig = new DataSourceConfig();</font></div><div><font style="font-size: 16pt;">        dataSourceConfig.setDriverName(&quot;com.mysql.jdbc.Driver&quot;);</font></div><div><font style="font-size: 16pt;">        dataSourceConfig.setUrl(&quot;jdbc:mysql:///db01?characterEncoding=UTF-8&amp;useSSL=false&amp;useUnicode=true&quot;);</font></div><div><font style="font-size: 16pt;">        dataSourceConfig.setUsername(&quot;root&quot;);</font></div><div><font style="font-size: 16pt;">        dataSourceConfig.setPassword(&quot;123456&quot;);</font></div><div><font style="font-size: 16pt;">        dataSourceConfig.setDbType(DbType.MYSQL);//设置数据库类型</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        autoGenerator.setDataSource(dataSourceConfig);</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        //3.包的配置</font></div><div><font style="font-size: 16pt;">        PackageConfig packageConfig = new PackageConfig();</font></div><div><font style="font-size: 16pt;">        packageConfig.setModuleName(&quot;test&quot;);//模块名称</font></div><div><font style="font-size: 16pt;">        packageConfig.setParent(&quot;cn.edu.zzu&quot;);//父目录</font></div><div><font style="font-size: 16pt;">        packageConfig.setEntity(&quot;entity&quot;);//实体类包名</font></div><div><font style="font-size: 16pt;">        packageConfig.setMapper(&quot;mapper&quot;);//Mapper的包名</font></div><div><font style="font-size: 16pt;">        packageConfig.setService(&quot;service&quot;);//Service的包名</font></div><div><font style="font-size: 16pt;">        packageConfig.setServiceImpl(&quot;service.impl&quot;);//Impl类路径</font></div><div><font style="font-size: 16pt;">        packageConfig.setController(&quot;controller&quot;);//Controller的包名</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        autoGenerator.setPackageInfo(packageConfig);</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">//====================================================================================================</font></div><div><font style="font-size: 16pt;">        // 自定义配置</font></div><div><font style="font-size: 16pt;">        InjectionConfig cfg = new InjectionConfig() {</font></div><div><font style="font-size: 16pt;">            @Override</font></div><div><font style="font-size: 16pt;">            public void initMap() {</font></div><div><font style="font-size: 16pt;">                // to do nothing</font></div><div><font style="font-size: 16pt;">            }</font></div><div><font style="font-size: 16pt;">        };</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        // 如果模板引擎是 freemarker</font></div><div><font style="font-size: 16pt;">        String templatePath = &quot;/templates/mapper.xml.ftl&quot;;</font></div><div><font style="font-size: 16pt;">        // 如果模板引擎是 velocity</font></div><div><font style="font-size: 16pt;">        // String templatePath = &quot;/templates/mapper.xml.vm&quot;;</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        // 自定义输出配置</font></div><div><font style="font-size: 16pt;">        List&lt;FileOutConfig&gt; focList = new ArrayList&lt;&gt;();</font></div><div><font style="font-size: 16pt;">        // 自定义配置会被优先输出</font></div><div><font style="font-size: 16pt;">        focList.add(new FileOutConfig(templatePath) {</font></div><div><font style="font-size: 16pt;">            @Override</font></div><div><font style="font-size: 16pt;">            public String outputFile(TableInfo tableInfo) {</font></div><div><font style="font-size: 16pt;">                // 自定义输出文件名 ， 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化！！</font></div><div><font style="font-size: 16pt;">                return path + &quot;/src/main/resources/mapper/&quot; + packageConfig.getModuleName()</font></div><div><font style="font-size: 16pt;">                        + &quot;/&quot; + tableInfo.getEntityName() + &quot;Mapper&quot; + StringPool.DOT_XML;</font></div><div><font style="font-size: 16pt;">            }</font></div><div><font style="font-size: 16pt;">        });</font></div><div><font style="font-size: 16pt;">        /*</font></div><div><font style="font-size: 16pt;">        cfg.setFileCreate(new IFileCreate() {</font></div><div><font style="font-size: 16pt;">            @Override</font></div><div><font style="font-size: 16pt;">            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {</font></div><div><font style="font-size: 16pt;">                // 判断自定义文件夹是否需要创建</font></div><div><font style="font-size: 16pt;">                checkDir(&quot;调用默认方法创建的目录，自定义目录用&quot;);</font></div><div><font style="font-size: 16pt;">                if (fileType == FileType.MAPPER) {</font></div><div><font style="font-size: 16pt;">                    // 已经生成 mapper 文件判断存在，不想重新生成返回 false</font></div><div><font style="font-size: 16pt;">                    return !new File(filePath).exists();</font></div><div><font style="font-size: 16pt;">                }</font></div><div><font style="font-size: 16pt;">                // 允许生成模板文件</font></div><div><font style="font-size: 16pt;">                return true;</font></div><div><font style="font-size: 16pt;">            }</font></div><div><font style="font-size: 16pt;">        });</font></div><div><font style="font-size: 16pt;">        */</font></div><div><font style="font-size: 16pt;">        cfg.setFileOutConfigList(focList);</font></div><div><font style="font-size: 16pt;">        autoGenerator.setCfg(cfg);</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        // 配置模板</font></div><div><font style="font-size: 16pt;">        TemplateConfig templateConfig = new TemplateConfig();</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        // 配置自定义输出模板</font></div><div><font style="font-size: 16pt;">        //指定自定义模板路径，注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别</font></div><div><font style="font-size: 16pt;">        // templateConfig.setEntity(&quot;templates/entity2.java&quot;);</font></div><div><font style="font-size: 16pt;">        // templateConfig.setService();</font></div><div><font style="font-size: 16pt;">        // templateConfig.setController();</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        templateConfig.setXml(null);</font></div><div><font style="font-size: 16pt;">        autoGenerator.setTemplate(templateConfig);</font></div><div><font style="font-size: 16pt;">//====================================================================================================</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        //4.策略配置</font></div><div><font style="font-size: 16pt;">        StrategyConfig strategyConfig = new StrategyConfig();</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        strategyConfig.setInclude(&quot;dept&quot;);//设置要映射的包名</font></div><div><font style="font-size: 16pt;">        strategyConfig.setNaming(NamingStrategy.underline_to_camel);//下划线赚驼峰</font></div><div><font style="font-size: 16pt;">        strategyConfig.setEntityLombokModel(true);//lomnok插件</font></div><div><font style="font-size: 16pt;">        strategyConfig.setLogicDeleteFieldName(&quot;deleted&quot;);//逻辑删除字段</font></div><div><font style="font-size: 16pt;">        strategyConfig.setChainModel(true);//链式编程</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        //自动填充配置  自动填充字段的填充策略设置</font></div><div><font style="font-size: 16pt;">        TableFill gmt_create = new TableFill(&quot;gmt_create&quot;, FieldFill.INSERT);</font></div><div><font style="font-size: 16pt;">        TableFill gmt_modified = new TableFill(&quot;gmt_modified&quot;, FieldFill.INSERT_UPDATE);</font></div><div><font style="font-size: 16pt;">        ArrayList&lt;TableFill&gt; tableFills = new ArrayList&lt;&gt;();</font></div><div><font style="font-size: 16pt;">        tableFills.add(gmt_create);</font></div><div><font style="font-size: 16pt;">        tableFills.add(gmt_modified)</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        strategyConfig.setTableFillList(tableFills);//自动填充配置</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        //乐观锁</font></div><div><font style="font-size: 16pt;">        strategyConfig.setVersionFieldName(&quot;version&quot;);//乐观锁字段</font></div><div><font style="font-size: 16pt;">        strategyConfig.setRestControllerStyle(true);//restfull风格</font></div><div><font style="font-size: 16pt;">        strategyConfig.setControllerMappingHyphenStyle(true);//localhost:8080/hello_id_</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        autoGenerator.setStrategy(strategyConfig);</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;">        autoGenerator.execute();//执行</font></div><div><font style="font-size: 16pt;">    }</font></div><div><font style="font-size: 16pt;">}</font></div></div><div><font style="font-size: 16pt;"><br/></font></div><div style="text-align: center;"><font style="font-size: 16pt;"><img src="./MyBatis-Plus/Image [4].png" type="image/png" data-filename="Image.png" width="1056"/></font></div><div style="text-align: center;"><font style="font-size: 16pt;">图 模糊查询</font></div><div style="text-align: center;"><font style="font-size: 16pt;"><img src="./MyBatis-Plus/Image [5].png" type="image/png" data-filename="Image.png" width="1055"/><br/></font></div><div style="text-align: center;"><font style="font-size: 16pt;">图 子查询</font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><font style="font-size: 16pt;"><br/></font></div><div><br/></div></span>
</div></body></html> 